/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package ru.infosystem.server.dao.xml;

import java.sql.Date;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.Queue;
import java.util.logging.Level;
import java.util.logging.Logger;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import javax.xml.transform.TransformerConfigurationException;
import javax.xml.transform.TransformerException;
import org.w3c.dom.Attr;
import org.w3c.dom.Document;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import ru.infosystem.client.data.Group;
import ru.infosystem.client.data.Student;
import ru.infosystem.server.dao.DaoFaculty;

/**
 *
 * @author DukeKan
 */
public class XmlDaoFaculty implements DaoFaculty {

    private Document doc;

    public XmlDaoFaculty(Document doc) {
        this.doc = doc;
    }

    @Override
    public ArrayList<Group> getListOfGroups(String num) {
        ArrayList<Group> list = new ArrayList<>();
        NodeList listOfFacs = this.doc.getElementsByTagName("faculty");
        if (listOfFacs != null) {
            for (int i = 0; i < listOfFacs.getLength(); i++) // если нашли нужный факультет
            {
                if (listOfFacs.item(i).getAttributes().item(0).getTextContent().equals(num)) {
                    NodeList groups = listOfFacs.item(i).getChildNodes();
                    // если факультет с группами
                    if (groups != null) {
                        for (int c = 0; c < groups.getLength(); c++) {
                            if (groups.item(c).getAttributes() != null) {
                                // группы не заполняются полностью, в них просто кладётся номер, и всё, без списка студентов
                                list.add(new Group(Integer.valueOf(groups.item(c).getAttributes().item(0).getTextContent()), num, null));
                            }
                            //else {
//                                list.add(new Group(0, num, null));
//                            }
                        }
                    }
                }
            }
        }
        return list;
    }

    @Override
    public ArrayList<Student> getListOfMathesStudents(String template) {
        Pattern pattern = Pattern.compile(template);


        NodeList listOfStudents = this.doc.getElementsByTagName("student");
        ArrayList<Student> listOfMathesStudents = new ArrayList<>();
        if (listOfStudents != null) {
            for (int i = 0; i < listOfStudents.getLength(); i++) {
                NodeList studentData = listOfStudents.item(i).getChildNodes();
                for (int c = 1; c < studentData.getLength(); c += 2) {
                    Matcher match = pattern.matcher(studentData.item(c).getTextContent());
                    if (match.find()) {
                        listOfMathesStudents.add(new Student(
                                studentData.item(3).getTextContent(),
                                studentData.item(1).getTextContent(),
                                studentData.item(5).getTextContent(),
                                Integer.parseInt(listOfStudents.item(i).getParentNode().getAttributes().item(0).getTextContent()),
                                Date.valueOf(studentData.item(7).getTextContent())));
                        break;
                    }
                }
            }
        }



        return listOfMathesStudents;
    }
}